/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.montadora.abc.controller;

import br.com.montadora.abc.dao.PessoaDAO;
import br.com.montadora.abc.model.Funcionario;
import br.com.montadora.abc.model.Pessoa;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author Aurelio
 */
@ManagedBean(name = "clienteCtrl")
@SessionScoped
public class ClienteController {
    private PessoaDAO clienteDAO;
    private Pessoa cliente;
    private Integer idFuncionarioEscolhido;
    
    public ClienteController() {
        clienteDAO = PessoaDAO.getInstance();
        cliente = new Pessoa();
    }
    
        
     public List<SelectItem> carregarFuncionarios(){
        List<Funcionario> funcionarios = clienteDAO.carregarTudoOrdenado(Funcionario.class, "nome");
        List<SelectItem> retorno = new ArrayList(funcionarios.size());
        for (Funcionario funcionario : funcionarios) {
            retorno.add(new SelectItem(funcionario.getId(), funcionario.getNome()));
        }
       return retorno;
    }
    
    public List<Pessoa> listarClientes() {
        List<Pessoa>listaPessoas = new ArrayList<Pessoa>();
        try{
           // listaPessoas = clienteDAO.carregarTudoOrdenado(Pessoa.class, "nome");
            listaPessoas = clienteDAO.listarClientes();
            return listaPessoas;
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }

    }

    public void excluiCliente(Pessoa cliente) {
        try {
            clienteDAO.excluir(cliente);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cliente excluído com sucesso!", null));
        } catch (Exception e) {
            e.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Ocorreu um erro ao tentar excluir este cliente!", null));
        }
    }

    public void salvarCliente() {
        try {
            Funcionario funcionario = (Funcionario) clienteDAO.carregarUm(idFuncionarioEscolhido, Funcionario.class);
            this.cliente.setFuncionario(funcionario);
            clienteDAO.gravar(this.getCliente());
            this.setCliente(new Pessoa());
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cliente salvo com sucesso!", null));
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocorreu um erro ao tentar salvar este cliente!", null));
        }

    }
    
    public void alterarCliente(){
        try {
            Funcionario funcionario = (Funcionario) clienteDAO.carregarUm(idFuncionarioEscolhido, Funcionario.class);
            this.cliente.setFuncionario(funcionario);
            clienteDAO.alterar(this.getCliente());
            this.setCliente(new Pessoa());
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cliente atualizado com sucesso!", null));
            
        } catch (Exception e) {
            e.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao atualizar o cliente!!", null));
        }
    }

    /**
     * @return the cliente
     */
    public Pessoa getCliente() {
        return cliente;
    }

    /**
     * @param cliente the cliente to set
     */
    public void setCliente(Pessoa cliente) {
        this.cliente = cliente;
    }

    /**
     * @return the idFuncionarioEscolhido
     */
    public Integer getIdFuncionarioEscolhido() {
        return idFuncionarioEscolhido;
    }

    /**
     * @param idFuncionarioEscolhido the idFuncionarioEscolhido to set
     */
    public void setIdFuncionarioEscolhido(Integer idFuncionarioEscolhido) {
        this.idFuncionarioEscolhido = idFuncionarioEscolhido;
    }
    
    
    
}
